package com.server.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class dateUtils {


//    一、字符串获取字符串列表
    //遍历每天
    public static List<String> findDays(String dBegin, String dEnd)  throws ParseException {
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<String> dateList = new ArrayList<String>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(resulfmt.format(calBegin.getTime()));
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.DAY_OF_YEAR, 1);

        }
        dateList.add(resulfmt.format(calBegin.getTime()));
        return dateList;
    }


    //遍历每个月
    public static List<String> findMonths(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<String> dateList = new ArrayList<String>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(resulfmt.format(calBegin.getTime()));
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
             calBegin.add(Calendar.MONTH, 1);
//            //  下个月天数减1 来到了当月(即开始月份)的最后一天
//             calBegin.add(Calendar.DAY_OF_MONTH, -1);
//            // 下个月时间减1分钟 来到了当月(即开始月份)的最后一天的23:59:00
//            calBegin.add(Calendar.MINUTE,-1);
//            // 记录当月的结束时间  82800000L
//            //         dateList.add(resulfmt.format(calBegin.getTime()));//获取当前日历时间戳并格式化
//            // 当前月份加1得到下个月份
//            // calBegin.add(Calendar.DAY_OF_MONTH, 1);
//            // calBegin.add(Calendar.MINUTE, 1);
//            //依次循环并记录日期
        }
        dateList.add(resulfmt.format(calBegin.getTime()));
        return dateList;
    }

    // 遍历每个小时
    public static List<String> findHours(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<String> dateList = new ArrayList<String>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(resulfmt.format(calBegin.getTime()));
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.HOUR, 1);

        }
        dateList.add(resulfmt.format(calBegin.getTime()));
        return dateList;
    }

    // 遍历每个小时
    public static List<String> findMinutes(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<String> dateList = new ArrayList<String>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(resulfmt.format(calBegin.getTime()));
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.MINUTE, 5);
        }
        dateList.add(resulfmt.format(calBegin.getTime()));
        return dateList;
    }


    //   二、字符串获取日期列表
    //遍历每天
    public static List<Date> findDateDays(String dBegin, String dEnd)  throws ParseException {
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<Date> dateList = new ArrayList<>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(calBegin.getTime());
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.DAY_OF_YEAR, 1);

        }
        dateList.add(calBegin.getTime());
//        calBegin.add(Calendar.DAY_OF_YEAR, 1);
//        dateList.add(resulfmt.format(calBegin.getTime()));
        return dateList;
    }


    //遍历每个月
    public static List<Date> findDateMonths(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<Date> dateList = new ArrayList<>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(calBegin.getTime());
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.MONTH, 1);
//            // 下个月天数减1 来到了当月(即开始月份)的最后一天
//            calBegin.add(Calendar.DAY_OF_MONTH, -1);
//            // 下个月时间减1分钟 来到了当月(即开始月份)的最后一天的23:59:00
//            calBegin.add(Calendar.MINUTE,-1);
//            // 记录当月的结束时间  82800000L
//            //         dateList.add(resulfmt.format(calBegin.getTime()));//获取当前日历时间戳并格式化
//            // 当前月份加1得到下个月份
//            // calBegin.add(Calendar.DAY_OF_MONTH, 1);
//            // calBegin.add(Calendar.MINUTE, 1);
//            //依次循环并记录日期
        }

        dateList.add(calBegin.getTime());
        return dateList;
    }

    // 遍历每天
    public static List<Date> findDateHours(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<Date> dateList = new ArrayList<>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(calBegin.getTime());
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.HOUR, 1);

        }

        dateList.add(calBegin.getTime());
        return dateList;
    }

    // 遍历每个小时
    public static List<Date> findDateMinutes(String dBegin, String dEnd)  throws ParseException{
        //日期工具类准备
        DateFormat resulfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //设置开始时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(resulfmt.parse(dBegin));
        //设置结束时间
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(resulfmt.parse(dEnd));
        //装返回的日期集合容器
        List<Date> dateList = new ArrayList<>();
        // 每次循环给calBegin日期加一天，直到calBegin.getTime()时间等于dEnd
        while (calEnd.after(calBegin))  {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            // 优先记录当月时间： 开始时间
            dateList.add(calBegin.getTime());
            // 优先记录当月时间： 结束
            // 当前日历月份加1 来到了下个月
            calBegin.add(Calendar.MINUTE, 5);

        }

        dateList.add(calBegin.getTime());
        return dateList;
    }



}
